package top.gytf.unifiedcall.common.contract;

import top.gytf.distools.lifecycle.Manager;
import top.gytf.unifiedcall.model.contract.ApiContract;

import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;

/**
 * API协定管理
 */
public interface ApiContractManager extends Manager {
    /**
     * 加载API协定
     * @param apiMethod 指定承载API协定的Java方法
     */
    void load(Method apiMethod);
    
    /**
     * 获取API协定
     *
     * @param apiMethod 指定API协定对应的Java方法
     * @param loadIfNeed 如果{@code apiMethod}未被加载时是否允许进行加载
     *
     * @return 如果获取不到的则返回 {@link Collections#emptyList()}
     * 
     * @see #load(Method) 
     */
    List<ApiContract> findContracts(Method apiMethod, boolean loadIfNeed);
}
